Object.prototype.propiedades = function(){
	var resultado = [];
	for(var propiedad in this){
		// si es nuestra propiedad
		if(this.hasOwnProperty(propiedad)){
			resultado.push(propiedad)
		}
	}
	return resultado
}

var prueba = [];
//prueba.propiedades();


function forEachIn(objecto, accion){
	for(var propiedad in objecto){
		if(objecto.hasOwnProperty(propiedad))
			accion(propiedad, objecto[propiedad]);
	}
}

var quimera = {cabeza: "leon", cuerpo:"cabra", cola:"serpiente"};

//forEachIn(quimera, function(nombre, valor){
//	console.log("nombre: " + nombre + " valor: " + valor);
//});


//////////////////

// devuelve la funcion si existe y se puede llamar
// return Object.prototype.hasOwnProperty.call(this.valores, nombre)

function clone(objecto){
	function ConstructorRapido(){};
	ConstructorRapido.prototype=objecto;
	return new ConstructorRapido();
}

// si un metodo no se encuentra, este se va buscando al principio del l jerarquia99

// Object.prototype.inherit
Object.prototype.inherit = function(constructorBase){
	this.prototype = clone(constructorBase.prototype);
	// le pasamos una function al constructor
	this.prototype.construtor = this;
}

Object.prototype.method = function(nombre, func){
	this.prototype[nombre] = func;
};



function ArrayRaro(){};
ArrayRaro.inherit(Array)
// ArrayRaro.method



/**
 * Construimos un nuevo objeto a partir del objeto
 * que le pasaoms
 */
Object.prototype.create = function(){
	var object = clone(this);
	if (typeof object.construct == "function") {
		object.construct.apply(object,arguments)
	};
	return object;
}

var Temp = function(){};

console.log(Temp.create());

/**
 * Allows you to call one method for each object that
 * call it.
 */
Object.prototype.extend = function(){
	var resultado = clone(this);
	forEachIn(propiedades, function(nombre, valor){
		resultado[nombre] = valor;
	})
	return resultado;
}



var Item = {
	construct : function(name){
		this.name = name
	},
	inspect: function(){
		document.write("The name")
	}
}


var linternaDetallada = Item.extend({
	construct : function () {
		// custom constructor
	},
	inspect : function () {
		// custom
		document.write("Testing");

	}
})

// new approach
var linternaDetallada = Item.create("linterna de laton");
linternaDetallada.inspect();

// mixim es un prototipo mezcaldo en tro prototipos


// Modularidad
/*
load("funcionesUtiles.js")

variables declaradas en eval pasan a ser locales en el ambiente d e eval.
 */

/*
los ultimos strings representan a los patrones

replace((), (), "$2, $1"   )
 */

//var sitio = window.open("http://www.google.com");
// console.log(sitio.Math);

//console.log("LOCATION" + document.location.href);

/*
XSS
 */
var encodeo = encodeURIComponent("republica argentian");
console.log(encodeo);
console.log(decodeURIComponent(encodeo));

var $ = function(id){
	return document.getElementById(id);
};

$("boton").addEventListener("click", function(){
	console.log(window.event);
}

$("boton").addEventListener("click", function(){
	console.log(window.event);
});

/*
un p con un em dentro.. devulve tres nodos.

nodevalue - si insertamos un stron lo inserta litaralmente

innerHtml - lo inserta como html





 */



